//  Copyright Druid Mechanics

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "GameplayTagContainer.h"
#include "AttributeInfo.generated.h"


USTRUCT(BlueprintType)
struct FAuraAttributeInfo
{
	GENERATED_BODY()
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FGameplayTag AttributeTag{FGameplayTag()};
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FText AttributeName{FText()};
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FText AttributeDescription{FText()};
	UPROPERTY(BlueprintReadOnly)
	float AttributeValue{0.f};
};


/**
 * UDataAsset:
 * 创建一个简单的资产，在该类的实例中存储与特定系统相关的数据。
 * 可以在内容浏览器中使用从其继承的任何本机类创建资源。
 * 如果你想要数据继承或复杂的层次结构，应该创建仅数据蓝图类。
 * NOTE: 简单来说，就是创建资产可以在内容浏览器中查看并使用。
 */
UCLASS()
class AURA_API UAttributeInfo : public UDataAsset
{
	GENERATED_BODY()
public:
	/**
	 * 
	 * @param AttributeTag 需要查询的GameplayTag。
	 * @param bLogNotFound 如果没发现GameplayTag是否写入Log。
	 * @return 属性信息。
	 */
	FAuraAttributeInfo FindAttributeInfoForTag(const FGameplayTag& AttributeTag, bool bLogNotFound = false) const;
	/**
		* 猜测: 
		* UPROPERTY(AssetRegistrySearchable)
		* TSubclassOf<UDataAsset> NativeClass;
		* 由于此UAttributeInfo继承自UDataAsset，而在UDataAsset中有NativeClass被标示为AssetRegistrySearchable，表示被资产映射表标识为可被收集，
		* 因此其继承自它的子类的数据都会被收集。
	  */
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TArray<FAuraAttributeInfo> AttributeInformation;
};
